// 常量
const staticPath = './static'
// 引入
const Koa = require('koa')
const cors = require('koa2-cors'); // 跨域组件
const Logger = require('koa-logger') // 日志中间件
const bodyParser = require('koa-bodyparser'); // post 请求解析参数
const { koaBody } = require('koa-body')
const koa_jwt = require('koa-jwt') //用户接口需要验证的
const consola = require('consola') //格式化打印插件 也可以不用用console
const moment = require('moment') // 时间格式化插件
const authorization=require('./www/middleware/authorization')
const miLog = require('./www/utils/logger')
const config   = require('./www/utils/config')
require('./www/db')
// 实例对象
const app = new Koa()



// 注册中间件
app.use(miLog())
// 跨域组件要放在路由上面，不然没用
app.use(cors())

const logger = new Logger((str,args) => {
    consola.info(moment().format('YYYY-MM-DD HH:MM:SS') +str)
})


app.use(koaBody({
    multipart: true,
    formidable: {
        maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制，默认2M
    }
}))
app.use(bodyParser())
//路由【接口】
app.use(koa_jwt({
    secret: config.secret
}).unless({
    path: [
        /^\/api\/admin\/login/,
        /^\/api\/web\/auth\/login/,
        /^\/api\/web\/register/,
        /^\/api\/web\/goods\/list/,
        /^\/api\/web\/goods\/detail/,
        /^\/api\/web\/login\/init/,
        /^\/static\/upload/,
        /^\/api\/web\/self\/notifyOrder/
    ] //除了这个地址，其他的URL都需要验证
}))


app.use(logger)
// 验证
app.use(authorization())
// 路由 也就是接口的定义
const routers = require('./www/routers/index')
// 路由加载
app.use(routers.routes()).use(routers.allowedMethods())

app.on('error', err => {
    consola.error(`系统异常${err}`)
})

/**
 * 端口
 */
app.listen(config.port || '80', () => {
    consola.success(`Server running at Port:${config.port}`)
})